// pages/publicDetail/index.ts
import {taskExecuteForward, taskExecuteLike, taskExecuteReadTime, taskExecuteRoute, taskExecuteShare } from "../../service/api/api-promotion";
import { createShareAppMessageInfo, createShareTimelineInfo, handleCode, handleErrCode } from "../../utils/util";
import { DEFAULT_CODE, PUBLIC_ACCOUNT_STATE_LIST } from "../../utils/enmu";
let toast;
Page({

  /**
   * 页面的初始数据
   */
  data: {
    task: {},// 当前的任务内容对象
    admin: false,// 是否是admin，只是管理员就查看
    url: '',// 目标地址
    timer: 0,// 纪录阅读时间的计时器
    times: 0,// 纪录阅读时间数量
    percentage: 0,// 纪录阅读时间数量
    countdown: 0,// 倒计时
    eachTime: 0,// 倒计时
    showTimer: false,// 是否显示右侧计时器
    showShareBtn: false,// 是否显示分享按钮
    showLikeBtn: false,// 是否显示点赞按钮
    isHideLikeBtn: false,//点赞按钮埋点罩层是否存在
    access: {} as any,// 当前用户权限
    currentUser: {},// 当前用户信息
    dropdownShow: false,// 是否显示底部分享
    wxCodes: [],// 之前一些分享用户的前辈信息
    curColor: '#FF814A',// 当前的颜色
    // curColor: '#389E0D',// 当前的颜色
    curFont: 20,// 当前字体大小
    startCountDown: false,// 是否可以开始倒计时
    onWebViewLoadOver: false,// webview是否加载完成
    showForceReadModal: false,
    isHarmony: false,//是否是鸿蒙系统，如果是需要手动触发分享按钮
  },
  // 显示强制阅读弹窗
  showForceReadModal() {
    this.setData({
      showForceReadModal: true,
    });

  },


  // 确认操作
  confirmAfterRead(e) {

    this.setData({ showForceReadModal: false });

    // 这里执行真正的分享逻辑
    wx.openOfficialAccountArticle({
      url: this.data.url, // 此处填写公众号文章连接
      success: res => {

        this.taskExecuteForwardFun()
      },
      fail: res => {
        console.log('222', res);
      }
    })

  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(option) {
    wx.showShareMenu({
      withShareTicket: true,
      menus: ['shareAppMessage', 'shareTimeline']
    })
    // 监听内存警告
    wx.onMemoryWarning((res) => {
      console.warn('内存警告:', res);
      this.handleMemoryWarning(res);
    });
    //鸿蒙系统监听
    const systemInfo = wx.getSystemInfoSync();
    // 鸿蒙系统标识：harmony（部分设备可能返回android）
    this.setData({ isHarmony: systemInfo.system.toLowerCase().includes('harmony') });
    const eventChannel = this.getOpenerEventChannel()
    let _that = this;
    if (option.task) {
      try {
        const taskStr = decodeURIComponent(option.task);
        const task = JSON.parse(taskStr);
        _that.taskExecuteRouteFun(task);
        console.log('===========', task);

        _that.setData({
          task,
          showShareBtn: task.isDemandShare == 1 && task.executeShare == 0,
          showLikeBtn: task.isDemandLike == 1 && task.executeLike == 0,
          url: task.route || ''
        })
        // 你可以在这里调用接口  
      } catch (e) {
        console.error('解析task参数出错', e);
      }
    }
    // eventChannel.emit('acceptDataFromOpenedPage', {data: 'test'});// 向上传递信息
    // eventChannel.emit('someEvent', {data: 'test'});
    // 监听acceptDataFromOpenerPage事件，获取上一页面通过eventChannel传送到当前页面的数据
    // console.log('3333333333333',option);
    // eventChannel.on('acceptDataFromOpenerPage', function (data) {
    //     console.log(data.data)
    //     const {data: task} = data;
    //     _that.taskExecuteRouteFun(task);
    //     _that.setData({
    //         task,
    //         url: task.route || ''
    //     })
    // })
    const { globalData: { access, currentUser } } = getApp();
    const admin = access.showPromotion && access.新媒连心桥x列表x管理员
    this.setData({
      access,
      admin,// 管理员
      currentUser,
    })
  },

  /**
   * 页面加载成功时
   */
  async onWebViewLoad(e) {
    console.log('加载成功');
    // 开始计时
    this.setData({
      onWebViewLoadOver: true
    })

    if(!this.data.isHarmony) {
      this.startCountDownCheck() && this.tikTokFun()
    } else {
      if(this.data.task.executeReadTime!=1) {
        await taskExecuteReadTime({
          taskId: this.data.task.id,
        }).then(res => {
          this.onChangePrePageState('executeReadTime')
          handleCode(res, '阅读任务完成');
        }).catch(e => {
          console.warn(e);
        })
      }
    }
  },

  /**
   * 判断是否可以开始计时
   * 非管理员，route接口调用成功，webview加载成功，三个条件
   */
  startCountDownCheck() {
    return this.data.startCountDown && this.data.onWebViewLoadOver
  },

  /**
   * 取上个页面的数据并修改状态
   */
  onChangePrePageState(isExecute: string) {

    const pages = getCurrentPages();
    const prevPage = pages[pages.length - 2];  // 上一个页面  
    const info = prevPage.data.taskList;       // 取上页data里的数据  

    // 遍历info中的每个item，寻找匹配的task.id  
    let taskIndex = -1;
    let taskArrayIndex = -1; // 用来存储taskArray中的索引  
    let indexState = -1
    for (let i = 0; i < info.length; i++) {
      const taskArray = info[i].tasks;
      const stateArray = info[i].list;
      const indexInTasks = taskArray.findIndex((item, index) => item.id === this.data.task?.id);
      const stateListTasks = stateArray.findIndex((item, index) => item.id === this.data.task?.id);
      //状态的index
      indexState = stateArray[stateListTasks]?.stateList.findIndex((item, index) => item.key === isExecute);
      if (indexInTasks !== -1) {
        taskIndex = i; // 返回符合条件的第一个index  
        taskArrayIndex = indexInTasks; // taskArray中的索引  
        break;
      }
    }

    let type = this.data.task?.type
    switch (type) {
      case 1: // 公众号，要阅读，要分享，要分享阅读，要点赞

        // if(this.data.task.executeReadTime == 0 && isExecute == 'executeReadTime') {
        //   info[taskIndex].list[taskArrayIndex].stateList = info[taskIndex].list[taskArrayIndex].stateList.forEach(element => {
        //     element.key != 'executeReadTime'
        //   });
        // }

        // if(this.data.task.executeShare == 0 && isExecute == 'executeShare') {
        //   info[taskIndex].list[taskArrayIndex].stateList = info[taskIndex].list[taskArrayIndex].stateList.forEach(element => {
        //     element.key != 'executeShare'
        //   });
        // }

        // if(this.data.task.executeLike == 0 && isExecute == 'executeLike') {
        //   info[taskIndex].list[taskArrayIndex].stateList = info[taskIndex].list[taskArrayIndex].stateList.forEach(element => {
        //     element.key != 'executeLike'
        //   });
        // }

        // if(info[taskIndex].list[taskArrayIndex].stateList.length == 0) {
        //   info[taskIndex].list[taskArrayIndex].stateList = [{
        //     key: 'executeRouter', label: '已完成', color: '#389E0D'
        //   }]
        // }
        let stateList = info[taskIndex].list[taskArrayIndex].stateList
        console.log(stateList);
        //修改计时器状态，阅读任务完成后不在继续计时
        if (isExecute === "executeReadTime") {
          info[taskIndex].list[taskArrayIndex].executeReadTime = 1
        }
        if (stateList.length >= 2) {
          info[taskIndex].list[taskArrayIndex].stateList = stateList.filter(item => item.key !== isExecute)
        }
        if (stateList.length === 1) {
          if (stateList[0].key !== "executeShareRead") {
            info[taskIndex].list[taskArrayIndex].stateList = [{
              key: 'executeRouter', label: '已完成', color: '#389E0D'
            }]
          }
        }

        console.log(stateList);

        break;
      case 2: // 视频号，只需要阅读
        info[taskIndex].list[taskArrayIndex].stateList[taskArrayIndex] = {
          key: 'executeRouter', label: '已完成', color: '#389E0D'
        }
        break;
      case 3: // 抖音，只需复制
        info[taskIndex].list[taskArrayIndex].stateList[taskArrayIndex] = {
          key: 'executeRouter', label: '已复制', color: '#389E0D'
        }
        break;
      default:
        break;
    }

    prevPage.setData({
      taskList: info
    });
    console.log('满足条件的index:', prevPage);
  },

  /**
   * 时间计时器
   */
  async tikTokFun(loop = false) {
    const { data: { task, timer, times } } = this;

    clearTimeout(timer);
    let _that = this;
    console.log('22222222222222222222222222', task.isDemandReadTime);
    if (task.executeReadTime) {// 已经统计过一次读文章
      timer
    }
    if (task && task.isDemandReadTime !== null && typeof task.isDemandReadTime !== "undefined" && task.executeReadTime !== 1) {
      console.log(task.isDemandReadTime);

      this.setData({
        showTimer: true,
        eachTime: 100 / task.isDemandReadTime
      })
      if (times >= task.isDemandReadTime) {// 计时统计完了，调用接口通知一下后台
        clearTimeout(timer);
        _that.setData({
          curColor: '#389E0D',// 完成绿色
          curFont: 14,
          countdown: '完成',
        })
        // 1.5s后隐藏计时器
        setTimeout(() => {
          _that.setData({
            showTimer: false,
          })
        }, 1500)
        await taskExecuteReadTime({
          taskId: task.id,
        }).then(res => {
          _that.onChangePrePageState('executeReadTime')

          handleCode(res, '阅读任务完成');
        }).catch(e => {
          console.warn(e);
          handleErrCode('计时失败')
        }).finally(() => {
          _that.setData({
            timer: null,
            times: 0,
            percentage: 0,
            countdown: 0,
          })
        })
      } else {
        // 初次设置一下初始值
        if (!loop) {
          this.setData({
            countdown: task.isDemandReadTime,
            percentage: 0,
          })
        }
        // 继续计时
        this.data.timer = setTimeout(() => {
          let newVal = _that.data.times + 1;
          let countdown = task.isDemandReadTime - newVal;
          let percentage = Number(((newVal / task.isDemandReadTime) * 100).toFixed(0));
          // console.log(newVal);
          // console.log(countdown);
          // console.log(percentage);
          _that.setData({
            times: newVal,
            percentage,
            countdown
          })
          _that.tikTokFun(true)
        }, 1000)
      }
    } else {
      console.warn('task.isDemandReadTime is null or undefined')
    }
  },
  /**
   * 处理内存警告
   */
  handleMemoryWarning(res: WechatMiniprogram.OnMemoryWarningListenerResult) {
    console.warn('内存不足，当前内存级别:', res.level);

    // 1. 清除定时器（防止内存泄漏）
    if (this.data.timer) {
      clearTimeout(this.data.timer);
      this.setData({ timer: null });
    }

    // 2. 释放不必要的资源（如大图、缓存等）
    this.setData({
      task: {}, // 清空大对象
      wxCodes: [], // 清空历史数据
    });

    // 3. 提示用户（可选）
    wx.showToast({
      title: '内存不足，正在优化',
      icon: 'none',
      duration: 2000,
    });

    // 4. 如果问题严重，可以跳转到轻量级页面
    // wx.redirectTo({ url: '/pages/lightweightPage' });
  },
  /**
   * 页面加载失败时
   */
  onWebViewError(e) {
    console.log(e);
    handleErrCode('页面加载失败')
  },

  /**
   * 公众号跳转执行
   */
  async taskExecuteRouteFun(task) {
    await taskExecuteRoute({
      taskId: task.id,
    }).then(res => {
      if (res?.code === 0) {
        this.setData({
          startCountDown: true
        })
        this.startCountDownCheck() && this.tikTokFun()
      }
    }).catch(e => {
      console.warn(e);
      handleErrCode(e)
    })
  },
  /**
   * 执行公众号分享
   */
  async taskExecuteShareFun() {

    this.taskExecuteShareFunAsync();
    
    
    // if (this.data.isHarmony) {
    //   // 鸿蒙设备使用手动触发分享
    //   this.manualTriggerShare();
    // }
  
  },


  async taskExecuteShareFunAsync() {
    const { data: { task } } = this;
    let _that = this;
    await taskExecuteShare({
      taskId: task.id,
    }).then(res => {
      _that.onChangePrePageState('executeShare')
    }).catch(e => {
      console.warn(e);
    })
  },


  // 手动触发分享（兼容鸿蒙）
  manualTriggerShare() {

    // let { wxCodes, currentUser, url, task } = this.data;
    // wxCodes.push(currentUser.id ?? DEFAULT_CODE);// 加入当前分享用户，999999代表code错误
    // wx.showToast({
    //   title: 'res1'
    // })
    // const info = createShareAppMessageInfo(task, currentUser, wxCodes, 'pages/publicShareDetail/index', url)
    // wx.shareAppMessage({
    //   info,
    //   success: () => {
    //     wx.showToast({ title: '分享成功' })
    //   },
    //   fail: (err) => {
    //     wx.showToast({ title: '分享失败' })
    //     console.error(err)
    //   }
    // })
    // this.taskExecuteShareFunAsync()
  },

  /**
   * 执行公众号转发
   */
  async taskExecuteForwardFun() {

    const { data: { task } } = this;
    let _that = this;
    await taskExecuteForward({
      taskId: task.id,
    }).then(res => {
      wx.showToast({
        title: '分享成功',
      })
      _that.onChangePrePageState('executeForward')
    }).catch(e => {
      console.warn(e);
    })
  },
  /**
 * 执行点赞
 */
  async taskExecuteLikeFun() {

    const { data: { task } } = this;
    let _that = this;

    if (this.data.isHideLikeBtn == false) {
      //初始化的时候、不需要隐藏  false
      //点击第一下 进入该方法 需要隐藏该按钮
      this.setData({
        isHideLikeBtn: true
      })

      //执行点赞操作
      await taskExecuteLike({
        taskId: task.id,
      }).then(res => {
        _that.onChangePrePageState('executeLike')
      }).catch(e => {
        console.warn(e);
      })
    }

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {
    toast = this.selectComponent("#toast")
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    wx.showShareMenu({
      withShareTicket: true,
      menus: [
        'shareAppMessage', // 分享给朋友
        'shareTimeline',// 分享到朋友圈
      ]
    })
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
    clearTimeout(this.data.timer);
    clearInterval(this.data.timer);
    // 移除内存警告监听（避免重复监听）
    wx.offMemoryWarning();
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage(options) {
    console.log('分享', options)
    if (options.from === 'button') {
      console.log("来自页面内转发按钮");
      console.log(options.target);
    } else {
      console.log("来自右上角转发菜单")
    }
    // this.taskExecuteShareFun();// 执行分享接口
    let { wxCodes, currentUser, url, task } = this.data;
    wxCodes.push(currentUser.id ?? DEFAULT_CODE);// 加入当前分享用户，999999代表code错误
    const info = createShareAppMessageInfo(task, currentUser, wxCodes, 'pages/publicShareDetail/index', url)
    console.log('onShareAppMessage', info);
    return {
      ...info,
      success: (res) => {
        console.log("转发成功", res);
      },
      fail: (res) => {
        console.log("转发失败", res);
        wx.showToast({
          title: 'res3'
        })
      }
    }

  },
  /**
   * 用户点击右上角分享朋友圈
   */
  onShareTimeline(options) {
    console.log('分享', options)
    let { wxCodes, currentUser, url, task } = this.data;
    const info = createShareTimelineInfo(task, currentUser, wxCodes, url)
    return {
      ...info,
      success: (res) => {
        console.log("转发成功", res);
      },
      fail: (res) => {
        console.log("转发失败", res);
      }
    }

  },
})